// 代码段/数据段描述符定义
pub struct SegmentDescriptor {
    pub seg_base: u32,          // 段基地址
    pub seg_limit : u32,        // 段界限 = 长度 - 1
    pub seg_attribute : u16,    // 段属性
}

impl SegmentDescriptor {
    pub fn new() -> SegmentDescriptor {
        SegmentDescriptor { seg_base: 0, seg_limit: 0, seg_attribute: 0 }
    }
}

// GDT相关定义，导出给外部用
#[no_mangle]
pub static GDT_BASE: u32 = 0x1000;      // GDT表基地址
#[no_mangle]
pub static GDT_LIMIT: u16 = 0x400;      // GDT表界限

pub const TSS_SIZE:usize = 26;      // TSS大小：26 * 4字节
pub const ESP0_IDX:usize = 1;       // esp ring0在TSS中的索引
pub const SS0_IDX:usize = 2;        // ss ring0在TSS中的索引
pub struct TSS {
    pub tss: [u32; TSS_SIZE],
}
pub static mut TSS_DESC:TSS = TSS { tss: [0; TSS_SIZE]};
